如何模式匹配 Ecto 查询错误
How to pattern match Ecto query error
像 elixir 中的其他函数(以及 Ecto 自己的事务)一样,我想通过模式匹配来处理 Ecto 查询的潜在错误。像这样:
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} ->
#pass the error
end
显然这行不通,但我如何才能模式匹配 Ecto.NotSingleResult 等 Ecto 错误和预加载错误等其他潜在查询问题?
嘿,我对 elixir 有点陌生,但我认为你可以在这里使用保护子句
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} when :error === Ecto.NotSingleResult ->
#pass the error
end
使用 Repo.get
这将 return 一个值或零。然后,您可以在预期的结构上进行模式匹配或使用 if 子句。 Repo.get!
故意加注(对于你期望结构存在但不存在的情况是错误的)。
这可能会成功
case Repo.get(User, id) do
user when is_map(user) -> {:ok, user}
nil -> {:error, "not found"}
end
像 elixir 中的其他函数(以及 Ecto 自己的事务)一样,我想通过模式匹配来处理 Ecto 查询的潜在错误。像这样:
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} ->
#pass the error
end
显然这行不通,但我如何才能模式匹配 Ecto.NotSingleResult 等 Ecto 错误和预加载错误等其他潜在查询问题?
嘿,我对 elixir 有点陌生,但我认为你可以在这里使用保护子句
case Repo.get!(User, id) do
{:ok, user} ->
#do something
{:error, message} when :error === Ecto.NotSingleResult ->
#pass the error
end
使用 Repo.get
这将 return 一个值或零。然后,您可以在预期的结构上进行模式匹配或使用 if 子句。 Repo.get!
故意加注(对于你期望结构存在但不存在的情况是错误的)。
这可能会成功
case Repo.get(User, id) do
user when is_map(user) -> {:ok, user}
nil -> {:error, "not found"}
end